package com.sinog.basic.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.sinog.core.domain.User;
import com.sinog.core.domain.UserInterFaceEntity;
import com.sinog.core.utilbean.Result;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

/**
 * @desc 系统管理 - 用户管理 - 用户管理 - UserService
 * @author HAK
 * @date Created in 2019年07月09日  15点28分
 */
@RestController
public interface UserService extends IService<User> {

    /**
     * 系统管理 - 用户管理 - 用户管理 - 保存用户信息（更新/新增）
     * @param data data
     * @return Result
     */
    @PostMapping("/basic/user/save")
    Result save(String data);

    /**
     * 系统管理 - 用户管理 - 用户管理 - 分页查询用户信息
     * @param usernameKey usernameKey
     * @param pageIndex pageIndex
     * @param pageSize pageSize
     * @param pid pid
     * @param id id
     * @param orgid orgid
     * @param loginUserDepartid loginUserDepartid
     * @return String
     */
    @GetMapping("/basic/user")
    String selectUserList(
            @RequestParam("usernameKey") String usernameKey,
            @RequestParam("pageIndex") Integer pageIndex,
            @RequestParam("pageSize") Integer pageSize,String pid,String id,String orgid,String loginUserDepartid);

    /**
     * 系统管理 - 用户管理 - 用户管理 - 删除用户
     * @param id id
     * @return Result
     */
    @DeleteMapping("/basic/user/{id}")
    Result deleteOne(@PathVariable String id);

    /**
     * 系统管理 - 用户管理 - 用户管理 - 根据id查询用户
     * @param account account
     * @param avatarFlag 0:不需要查询头像avatar。1：需要查询avatar
     * @return Result
     */
    @GetMapping("/basic/user/{account}/{avatarFlag}")
    Result selectOne(@PathVariable("account") String account,@PathVariable("avatarFlag") String avatarFlag);

    /**
     * 系统管理 - 用户管理 - 用户管理 - 修改用户电话号码邮箱
     * @param account account
     * @param phone phone
     * @param email email
     * @param username username
     * @param telphone telphone
     * @return Result
     */
    @PostMapping("/basic/user/updateuserinfo")
    Result updateUserInfoOne(
            @RequestParam("account") String account,
            @RequestParam("phone") String phone,
            @RequestParam("email") String email,
            @RequestParam("username") String username,@RequestParam("telphone") String telphone);

    /**
     * 系统管理 - 用户管理 - 用户管理 - 更新头像
     * @param account account
     * @param basefile basefile
     * @return Result
     */
    @PostMapping("basic/user/userupdatehead")
    Result updateUserHead(@RequestParam("account") String account,@RequestBody String basefile);

    /**
     * 系统管理 - 用户管理 - 用户管理 - 根据账号查询
     * @param account account
     * @return UserInterFaceEntity
     */
    @GetMapping("/basic/user/account/{account}")
    UserInterFaceEntity getInfoByAccount(@PathVariable("account") String account);

    /**
     * 系统管理 - 用户管理 - 用户管理 - 根据账号重置密码
     * @param account account
     * @return Result
     */
    @GetMapping("/basic/user/resetPwd/{account}")
    Result resetPwd(@PathVariable("account") String account);

    /**
     * 系统管理 - 用户管理 - 用户管理 - 根据部门ID查询部门下全部子部门ID
     * @param departid departid
     * @return List<String>
     */
    @GetMapping("/basic/user/account/selectAllDepartIdByDepartid/{departid}")
    List<String> selectAllDepartIdByDepartid(@PathVariable("departid") String departid);

    /**
     * 系统管理 - 用户管理 - 新增 - 校验手机号是否重复
     * @param phoneNum 手机号码
     * @param account 当前账户
     * @return Result
     */
    @PostMapping("/basic/user/phone")
    Result checkPhone(@RequestParam("phoneNum")String phoneNum,@RequestParam("account")String account);

    /**
     * 山西个性化代码 首页 - 用户信息 - 修改
     * @param userPositionStr account
     * @return Result
     */
    @PostMapping("/basic/userposition/update")
    Result updateUserPositionById(@RequestParam("userPositionStr")String userPositionStr);

    /**
     * 山西个性化需求 - 根据account查询用户详情 获取主页右上方用户信息
     * @param account
     * @return Result
     */
    @GetMapping("/basic/userpositioninfo/{account}")
    Result selectUserPositionInfo(@RequestParam("account")String account);
}